package com.mikelouis.test.scala.proginscala.chapter28

/**
 * Created by yuazhu on 2/26/2015.
 */
object Tree1 {

  trait Tree[+T] {
    def elem: T

    def left: Tree[T]

    def right: Tree[T]
  }

  object EmptyTree extends Tree[Nothing] {
    def elem =
      throw new NoSuchElementException("EmptyTree.elem")

    def left =
      throw new NoSuchElementException("EmptyTree.left")

    def right =
      throw new NoSuchElementException("EmptyTree.right")
  }

  class Branch[+T](
                    val elem: T,
                    val left: Tree[T],
                    val right: Tree[T]
                    ) extends Tree[T]

}
